有時候我們要填入的參數
值的數量是不固定的
由於Go 支援不定長度參數的特性,所以我們可以用一個「...」的語法完成此類麻煩
...其實是go的一種語法糖。
第一個用法主要是用於函數有多個不定參數的情況,可以接受多個不確定數量的參數。
第二個用法是slice可以被打散進行傳遞。
第三個是標識數組元素個數
第四個是Go命令行中的通配符
https://juejin.im/post/5d10304c51882532251d2121
以下就是一個不定長參數的實例
package main
import (
"fmt"
)
func sum1(arr ... float64) float64 {
sum := 0.0
for _, e := range arr {
sum += e
}
return sum
}
func main() {
s := sum1(1, 2, 3, 4, 5)
fmt.Println(s)
}
在 sum1 函數設定輸入值 arr ... 就代表我設定了一個名為 arr 的輸入值,但稍後會有若干個(不只一個)參數輸入
sum1 的函數裡 我宣告了一個 sum 值並初始化為 0.0
用 range 呼叫等會數列裡的值,並逐一加法進 sum 裡取得數列總和
最後記得要 return(回傳) sum 值
這樣一來,我便可以在 main 函數設定新的數列 並呼叫 sum1 函數幫我取得數列總和
什麼是函數重載(what)?
函數重載是指在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。重載函數通常用來命名一組功能相似的函數,這樣做減少了函數名的數量,避免了名字空間的污染,對於程序的可讀性有很大的好處。
https://kknews.cc/code/x3jmkk8.html
簡單來說,今天我想弄一個 print() 函式可以印數值(int)
另一個 print() 函式可以用來印字串(String)
如果支持函式重載的程式語言
print(12)會去調用print(int),print("hello world")會去調用print(string)
不過,很可惜的 GO 不支援函式重載
go的官方文檔中說到,不支持重載機制可以簡化方法調度。從其他語言的經驗上看,重載只是偶爾有用,但會在實踐中引起誤解和導致脆弱性。
通常的作法我們還是只能直接命名兩種不同的函式名稱
package main
import "fmt"
func multi(x float64, y float64) float64{
return x * y
}
func multiFive(x float64) float64{
return multi(x , 5)
}
func main() {
fmt.Println(multi(7 , 4))
fmt.Println(multiFive(7))
}
執行結果
28
35
部份內容參自:https://michaelchen.tech/golang-programming/function/